package chapter14;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.regex.Pattern;

/**
 * @author : DuJiabao
 * @Date : 2021/2/25 14:29
 * @Project : thinking_in_java
 * @File : null.java
 * @Desc :
 */
public class ShowMethods {
  private static String usage =
          "usage:\n" +
          "ShowMethods qualified.class.name\n" +
          "To show all methods in class or:\n" +
          "ShowMethods qualified.class.name word\n" +
          "To search for methods involving 'word'";
  private static Pattern p = Pattern.compile("\\w+\\.");  // 所有方法、构造器名字前面的包名

  public static void main(String[] args) {
    args = new String[]{"chapter14.ShowMethods"};
    if(args.length < 1) {
      System.out.println(usage);
      System.exit(0);
    }
    int lines = 0;
    try {
      Class<?> c = Class.forName(args[0]);
      Method[] methods = c.getMethods();
      Constructor<?>[] ctors = c.getConstructors();
      if (args.length == 1) {
        for (Method method : methods) {
           System.out.println(p.matcher(method.toString()).replaceAll(""));  // 将所有符合的，替换成空字符串
        }
        for (Constructor<?> ctor : ctors) {
          System.out.println(p.matcher(ctor.toString()).replaceAll(""));  // 将所有符合的，替换成空字符串
        }
        lines = methods.length + ctors.length;
      } else {
        for (Method method : methods) {
          if (method.toString().contains(args[1])) {
            System.out.println(p.matcher(method.toString()).replaceAll(""));
            lines++;
          }
        }
        for (Constructor<?> ctor : ctors) {
          if (ctor.toString().contains(args[1])) {
            System.out.println(p.matcher(ctor.toString()).replaceAll(""));
            lines++;
          }
        }
      }
    } catch (ClassNotFoundException e) {
      System.out.println("Not such class: " + e);
    }
  }
}
